package 剑指专题.模拟;


/*
 * Author：江松
 * Date：2023/4/1 9:29
 *
 顺时针打印矩阵：
 注意在每个方向走完后要进行判断是否退出，否则会使得后面的数变化从而多输出一些值
 */

import java.util.ArrayList;

public class Main1 {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer>res=new ArrayList<>();
        if(matrix.length==0||matrix[0].length==0)return res;
        int up=0,down=matrix.length-1,left=0,right=matrix[0].length-1;

        while(up<=down&&left<=right){
            for(int i=left;i<=right;++i){
                res.add(matrix[up][i]);
            }
            up++;
            if(up>down)break;

            for(int i=up;i<=down;++i){
                res.add(matrix[i][right]);
            }
            right--;
            if(right<left)break;

            for(int i=right;i>=left;--i){
                res.add(matrix[down][i]);
            }
            down--;
            if(down<up)break;

            for(int i=down;i>=up;--i){
                res.add(matrix[i][left]);
            }
            left++;
            if(left>right)break;
        }
        return res;
    }
}
